/**
 * promise基础-es2015标准中提供的一种处理异步代码的方式
 * async await建立在promise基础上
 */
//1.Promise对象3种状态
// pending 等待
// fulfilled 成功
// rejected 失败
const p = new Promise(function(resolve,reject){
    //resolve 成功
    //reject 失败
    setTimeout(function(){
        resolve('成功')
    },1000)
})
console.log(p)//Promise {<pending>}正在执行
//p.then 执行成功回调
//then 方法能够在异步操作完成之后被执行，将原来的回调函数分离出来，
//在异步操作执行完后，再去执行回调函数
p.then(function(value){
    console.log(value)
})//成功
//then方法中实现链式调用
function runAsync2(){
    const p = new Promise(function(resolve,reject){
        setTimeout(function(){
            console.log('runAsync2')
            resolve('成功2')
        },2000)
    })
    return p
}
function runAsync3(){
    const p = new Promise(function(resolve,reject){
        setTimeout(function(){
            console.log('runAsync3')
            resolve('成功3')
        },2000)
    })
    return p
}
function runAsync4(){
    const p = new Promise(function(resolve,reject){
        setTimeout(function(){
            console.log('runAsync4')
            resolve('成功4')
        },2000)
    })
    return p
}
runAsync2().then(function(data){
    console.log(data)
    return runAsync3()
}).then(function(data){
    console.log(data)
    return runAsync4()
}).then(function(data){
    console.log(data)
})

//runAsync2 2s后执行runAsync3 2s后执行runAsync4

//then.catch 失败回调
//catch 方法能够在异步操作失败之后被执行，将原来的失败回调分离出来，
//在异步操作失败后，再去执行失败回调
function runAsync(){
    flag = false
    const p = new Promise(function(resolve,reject){
        setTimeout(function(){
            if(flag){
                resolve('成功')
            }else{
                reject('失败')
            }
        },2000)
    })
    return p
}
runAsync().then(function(data){
    console.log(data)
}).catch(function(data){
    console.log(data)
})